<!-- 登录 -->
<template>
  <el-row type="flex" class="row-bg" justify="center">
    <el-col :xl="6" :lg="7">
      <div class="login-form">
        <h2>欢迎来到VueAdmin管理系统</h2>
        <el-image
          style="width: 180px; height: 180px"
          :src="require('@/assets/logo.jpg')"
        ></el-image>
        <p>作者 shijiu</p>
        <p></p>
      </div>
    </el-col>
    <el-col :span="1">
      <el-divider direction="vertical"></el-divider>
    </el-col>
    <el-col :xl="6" :lg="7">
      <el-form
        label-position="right"
        :rules="rules"
        label-width="80px"
        :model="loginForm"
        ref="loginForm"
      >
        <el-form-item label="用户名" prop="username" style="width: 380px">
          <el-input v-model="loginForm.username"></el-input>
        </el-form-item>
        <el-form-item label="密码" prop="password" style="width: 380px">
          <el-input type="password" v-model="loginForm.password"></el-input>
        </el-form-item>
        <el-form-item label="验证码" prop="code" style="width: 380px">
          <el-input
            v-model="loginForm.code"
            style="width: 172px; float: left"
            maxlength="5"
          ></el-input>
          <el-image
            class="captchaImg"
            :src="captchaImg"
            @click="getCaptcha"
          >加载中</el-image>
        </el-form-item>
        <el-form-item>
          <el-button type="primary" @click="submitForm('loginForm')"
            >提交</el-button
          >
          <el-button @click="resetForm('loginForm')">重置</el-button>
        </el-form-item>
      </el-form>
    </el-col>
  </el-row>
</template>

<script>
//这里可以导入其他文件（比如：组件，工具js，第三方插件js，json文件，图片文件等等）
//例如：import 《组件名称》 from '《组件路径》';
import qs from "qs";
export default {
  //import引入的组件需要注入到对象中才能使用
  components: {},
  data() {
    //这里存放数据
    return {
      loginForm: {
        username: "shijiu", //用户名
        password: "kaguya", //密码
        imgKey: null, //验证码key
        code: "", //验证码
      },
      rules: {
        username: [
          { required: true, message: "请输入用户名", trigger: "blur" },
        ],
        password: [{ required: true, message: "请输入密码", trigger: "blur" }],
        code: [
          { required: true, message: "请输入验证码", trigger: "blur" },
          { min: 5, max: 5, message: "验证码为5个字符", trigger: "blur" },
        ],
      },
      captchaImg: "",
    };
  },
  //监听属性 类似于data概念
  computed: {},
  //监控data中的数据变化
  watch: {},
  //方法集合
  methods: {
    //提交表单
    submitForm(formName) {
      this.$refs[formName].validate((valid) => {
        if (valid) {
          this.$axios
            .post("/login?" + qs.stringify(this.loginForm))
            .then((res) => {
              this.$message.success("登录成功！");
              //表单校验完成后，后端会返回jwt
              const jwt = res.headers["authorization"];
              //前端拿到jwt后，以后的每次操作都需要携带jwt，这里放在store内，localStorage
              this.$store.commit("SET_TOKEN", jwt);
              console.log("跳转到主页")
              this.$router.push("/index");
            })
            .catch( error => {
              //登录失败，重新刷新验证码
              this.getCaptcha()
            })
        } else {
          return false;
        }
      });
    },
    //重置表单
    resetForm(formName) {
      this.$refs[formName].resetFields();
    },
    //获取验证码
    getCaptcha() {
      this.$axios.get("/captcha?"+qs.stringify(this.loginForm.imgKey)).then((res) => {
        if (res.data.data) {
          this.loginForm.imgKey = res.data.data.imgKey;
          this.captchaImg = res.data.data.captchaImg;

          //this.$message.success("获取验证码成功！");
          this.loginForm.code = "";
        }
      });
    },
  },
  //生命周期 - 创建完成（可以访问当前this实例）
  created() {
    //加载完毕后获取验证码
    this.getCaptcha();
  },
  //生命周期 - 挂载完成（可以访问DOM元素）
  mounted() {},
  beforeCreate() {}, //生命周期 - 创建之前
  beforeMount() {}, //生命周期 - 挂载之前
  beforeUpdate() {}, //生命周期 - 更新之前
  updated() {}, //生命周期 - 更新之后
  //3.0版本弃用 beforeDestroy() {}, //生命周期 - 销毁之前
  //3.0版本弃用 destroyed() {}, //生命周期 - 销毁完成
  beforeUnmount() {}, //生命周期 - 销毁之前
  unmounted() {}, //生命周期 - 销毁完成
  activated() {}, //如果页面有keep-alive缓存功能，这个函数会触发
};
</script>
<style scoped>
.el-col {
  display: flex;
  justify-content: center;
  align-items: center;
  height: 100%;
  text-align: center;
}
.el-row {
  height: 100%;
  /* background-color: #F9F9F9; */
  background-image: "@/assets/loginBG.jpg";
}
.el-divider {
  height: 200px;
}
.captchaImg {
  float: left;
  margin-left: 8px;
  border-radius: 4px;
}
</style>